package com.glr.dictionary.service;

import com.glr.dictionary.dao.DictDao;
import com.glr.dictionary.entity.DictEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 数据字典业务层
 *
 * @author GLoRy
 * @date 2021/6/1 14:39
 */
@Service
public class DictService {

    @Autowired
    private DictDao dictDao;

    /**
     * 增加数据字典
     *
     * @param dictEntity 字典实体
     */
    public void insertDict(DictEntity dictEntity) {
        dictDao.save(dictEntity);
    }

    /**
     * 数据字典修改
     *
     * @param dictEntity 字典实体
     */
    public void updateDict(DictEntity dictEntity) {
        dictDao.save(dictEntity);
    }

    /**
     * 数据字典删除
     *
     * @param id 字典id
     */
    public void deleteDict(Integer id) {
        dictDao.deleteById(id);
    }

    /**
     * 查询出所有的根节点
     *
     * @return 所有的根节点数据
     */
    public List<DictEntity> findAllRoot() {
        return dictDao.findAll();
    }

    /**
     * 分页查询所有根节点数据
     *
     * @param page     当前页
     * @param pageSize 每页条数
     * @return 所有根节点分页数据
     */
    public Page<DictEntity> findByPage(Integer page, Integer pageSize) {
        PageRequest pageRequest = PageRequest.of(page - 1, pageSize);
        return dictDao.findAll(pageRequest);
    }

    /**
     * 根据父节点查询对应的子节点数据
     *
     * @param id 父节点id
     * @return 子节点数据
     */
    public DictEntity findSonByRoot(Integer id) {
        return dictDao.findSonByRoot(id);
    }

    /**
     * 根据类型查询出对应所有节点
     *
     * @param dataType 数据类型
     * @return 所有节点
     */
    public List<DictEntity> findAllByType(Integer dataType) {
        return dictDao.findAllByDataType(dataType);
    }

    /**
     * 根据类型分页查询出对应所有节点
     *
     * @param dataType 数据类型
     * @param page 当前页
     * @param pageSize 每页条数
     * @return 所有节点分页数据
     */
    public Page<DictEntity> findByTypePage(Integer dataType, Integer page, Integer pageSize) {
        PageRequest pageRequest = PageRequest.of(page - 1, pageSize);
        return dictDao.findAllByDataType(dataType, pageRequest);
    }
}
